package practica2;

import java.util.Random;

public class Fila {

	private int [] fila;
	private boolean [] fija;
	
	public Fila(){
		fila = new int[9];
		fija = new boolean[9];
		for(int i=0;i<9;i++){
			fila[i] = 0;
			fija[i] = false;
		}
	}

	public Fila(Fila f){
		fila = new int[9];
		fija = new boolean[9];
		for(int i=0;i<9;i++){
			fila[i] = f.fila[i];
			fija[i] = f.fija[i];
		}
	}
	
	public Fila clone(){
		return new Fila(this);
	}
	
	public boolean esValida(){
		boolean[] esta = new boolean[10];
		for(int i=0;i<10;i++)
			esta[i] = false;
		for(int i=0;i<9;i++){
			if(fila[i]!=0)
				if(!esta[fila[i]])
					esta[fila[i]] = true;
				else
					return false;
		}
		return true;
	}
	
	public boolean estaCompleta(){
		boolean[] esta = new boolean[10];
		for(int i=1;i<10;i++)
			esta[i] = false;
		for(int i=0;i<9;i++)
			esta[fila[i]] = true;
		for(int i=1;i<10;i++)
			if(!esta[i])
				return false;
		return true;
	}
	
	public void completarFila(){
		if(esValida()){
			boolean[] esta = new boolean[10];
			for(int i=1;i<10;i++)
				esta[i] = false;
			for(int i=0;i<9;i++)
				esta[fila[i]] = true;
			int j=0;
			boolean rellenado;
			for(int i=1;i<10;i++)
				if(!esta[i]){
					rellenado = false;
					while(j<9 && !rellenado){
						if(fila[j]==0){
							fila[j] = i;
							rellenado = true;
						}	
						j++;
					}
				}
		}else
			System.out.println("Fila no valida! no se puede completar...");
	}
	
	public void random(){
		if(!estaCompleta())
			System.out.println("Fila no completa! no se puede hacer random...");
		else{
			Random ran = new Random();
			int r,aux;
			for(int i=0;i<9;i++){
				r = (int) Math.floor(ran.nextDouble()*9);
				if(!fija[i] && !fija[r]){
					aux = fila[i];
					fila[i] = fila[r];
					fila[r] = aux;
				}
			}
		}
	}
	
	public boolean getFija(int idx) {
		if(idx>=0 && idx<=8)
			return fija[idx];
		else
			return false; // ????????
	}

	public void setFija(int idx, boolean b) {
		if(idx>=0 && idx<=8)
			this.fija[idx] = b;
	}

	public int getFila(int idx) {
		return fila[idx];
	}

	public void setFila(int idx,int val) {
		if(idx>=0 && idx<=8 && val>=0 && val<=9)
			this.fila[idx] = val;
	}
	
	public String toString(){
		String s="";
		for(int i=0;i<9;i++)
			if(fila[i]!=0)
				s+=fila[i]+" ";
			else
				s+="_ ";
		return s;
	}
	
}
